import { topics } from '../../../api/topic'
const util = require('../../../utils/util')
let d = null;
// 深拷贝
const deepCopy = ( data )=> {
  let newData = Array.isArray(data)?[]: {};
  for(let key in data){
    if(typeof data[key] == 'object') {
      newData[key] = deepCopy(data[key])
    }
    else {
      newData[key] = data[key];
    }
  }
  return newData;
}
// 克隆一份数据
// let newTopics = deepCopy(topics);
// console.log("新数据:",newTopics)

// 个位数补一个0
const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : `0${n}`
}
// 格式化时间
function formatime(seconds){
  let h= 0 ,m= 0,s = 0;
  h = Math.floor(seconds / 3600);
  m = Math.floor(seconds % 3600 / 60);
  s = Math.floor(seconds % 60);
  h = formatNumber(h);
  m = formatNumber(m);
  s = formatNumber(s);
  return `${h}:${m}:${s}`
}
let dingshiqi = null;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    topics: topics,
    currentIndex: 0,// 用于切换题目
    total: topics.length,
    maxIndex: topics.length - 1,
    arr: [],// 记录用户选择的答案
    time: '00:00:00',
  },
  // 倒计时
  downTime(){
    let seconds = 30 * 60;
    seconds --;
    let v = formatime(seconds);
    this.setData({
      time: v
    })
    if(dingshiqi != null) clearInterval(dingshiqi);
    dingshiqi = setInterval(()=>{
        seconds --;
        if(seconds < 0) {
          wx.showToast({
            title: '测试时间到了~~',
            icon:'none'
          })
          clearInterval(dingshiqi);
          return;
        }
        let v = formatime(seconds);
        this.setData({
          time: v
        })
    },1000)
  },

  // 用户滑动选择的值
  changeFn(e){
    // console.log(e)
    let current = e.detail.current;
    this.setData({
      currentIndex: current
    })
  },
  // 点击序号选项切换题目
  tabFn(event){
    let dataset = event.currentTarget.dataset;
    let index = dataset.index;
    this.setData({
      currentIndex: index
    })
  },
  // 点击选择答案
  selectFn(event){
    // 获取组件中自定义的属性值
    let dataset = event.currentTarget.dataset;
    let arr = this.data.arr;
    let rIndex = dataset.rowindex;// 第几道题的索引
    let cIndex = dataset.colindex;// 第几个选项的索引
    // 处理用户点击的选项样式高亮
    topics[rIndex].option.forEach(opt=>{
      opt.isSelected = false
    })
    topics[rIndex].option[cIndex].isSelected = true;
    // 开始记录用户选择的选项
    arr[rIndex] = topics[rIndex].option[cIndex]
    // console.log("这是用户选择的答案：",arr);
    // 表示这道题已经做出选择了
    topics[rIndex].xxx = true;
    this.setData({
      topics: topics,
      arr: arr
    })
  },

  // 点击切换 上一题 
  prevFn(){
     let v = this.data.currentIndex;
     v --;
     if(v < 0) {
        wx.showToast({
          title: '没有上一题',
          icon:'none'
        })
        v = 0;
     }
    //  赋值
    this.setData({
      currentIndex: v
    })
  },
  // 点击切换 下一题
  nextFn(){
    let v = this.data.currentIndex;
     v ++;
     if(v > this.data.maxIndex) {
        wx.showToast({
          title: '没有下一题',
          icon:'none'
        })
        v = this.data.maxIndex;
     }
    //  赋值
    this.setData({
      currentIndex: v
    })
  },

  // 利用本地存储方法处理历史提交记录
  addHistoryFn(score){
      if(d != null) {
          return false;
      }
      d = setTimeout(()=>{
        let date = new Date()
        let datetime = util.formatTime(date);
        // console.log("时间:",datetime);
        // 一个对象就是一个历史记录
        let obj = {
          score,
          datetime,
          value: date.getTime()
        }
        // 假设没有本地存储数据
        // 从本地存储空间获取数据
        let histroy_locale = wx.getStorageSync('HISTORY');
        let arr = [];
        if(histroy_locale){
            arr =  JSON.parse(histroy_locale);
        }
        arr.push(obj);
        // 把数据设置在本地存储空间
        wx.setStorageSync('HISTORY', JSON.stringify(arr));
        clearTimeout(d)
        d = null;
      },300)
   },
  // 提交用户的测试数据
  // 跳转测试结果页面
  jumpResut(){
    let len = this.data.arr.length;
    if(len != this.data.total) {
      wx.showToast({
        title: '请不要漏题哦~~',
        icon:'none'
      })
      return ;
    }
    // 统计一下用户获取多少分
    // 定义计数器变量
    let score = 0;
    // 用户的答案
    let arr =  this.data.arr;
    // 循环
    for(let i = 0 ; i < arr.length ; i ++){
        if(arr[i] && arr[i].value){
           score += arr[i].value;
        }
    }
    // 记录当前函数作用域的this
    let _this = this;
    //  给用户一个提示
    wx.showModal({
      title: '温馨提示',
      content: '你确定要提交测试?',
      complete: (res) => {
        if (res.cancel) {
          // 取消
        }
    
        if (res.confirm) {
          wx.showLoading({
            title: '正在分析..',
          })
          // 确定
          _this.addHistoryFn(score);
          setTimeout(()=>{
            wx.hideLoading();
            wx.redirectTo({
              url: '../result/result?score='+score,
            })
            // wx.navigateTo({
            //   url: '../result/result?score='+score,
            // })
          },1000)
        }
      }
    })


  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
      // 一旦打开测试页面 就进入倒计时
      this.downTime();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
      // 每次打开页面都会执行这个onShow
      for(let i = 0 ; i < topics.length ; i ++){
           topics[i].xxx=false;
          for(let j = 0 ; j < topics[i].option.length ; j ++){
            topics[i].option[j].isSelected = false;
          }
      }
      this.setData({
        topics: topics
      })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})